package br.com.sistemasaude.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;

import br.com.sistemasaude.bean.Usuario;
import br.com.sistemasaude.util.JpaUtil;

public class UsuarioDaoImp implements UsuarioDAO{	
	
	
	private final GenericDAO<Usuario> dao;
	
	
	EntityManager em = new JpaUtil().getEntityManager();
	
	public UsuarioDaoImp(){
		dao = new GenericDAO<Usuario>(em, Usuario.class);		
	}
	
	

	public void salvar(Usuario usuario) {

		try {

			em.getTransaction().begin();
			dao.salvar(usuario);			
			em.getTransaction().commit();

			
		} catch (Exception e) {
			
			em.getTransaction().rollback();
			e.printStackTrace();
			
		} finally {
			
			if(usuario.getNivel()!=1){
			em.close();
			}
		}
		
	}

	@SuppressWarnings("unchecked")
	public List<Usuario> listar() {

		List<Usuario> listaUsuarios = null;

		try {
			listaUsuarios = (List<Usuario>) em.createQuery("from Usuario").getResultList();
		} catch (Exception e) {
				e.printStackTrace();
		} finally {
			em.close();
		}

		return listaUsuarios;
	}

	
public Usuario localizaCliente(String pNome){
		
		EntityTransaction t = em.getTransaction();

		Usuario paciente = null;
		try {

			t.begin();
			Query q =  em.createQuery("select p from Usuario p where concat(p.nome,' ',p.sobrenome) like:pNome");
			q.setParameter("pNome", pNome);
			paciente = (Usuario) q.getSingleResult();
			
			t.commit();
			

		} catch (Exception e) {

			e.printStackTrace();
			if (t.isActive()) t.rollback();

		} finally {

			em.close();
		}
		
		return paciente;

	}
	


}
